/**
 * 音频类型枚举
 */
export enum AudioType {
    MUSIC = 'music',    // 背景音乐
    SOUND = 'sound',    // 音效
    VOICE = 'voice'     // 语音
}

/**
 * 音频状态枚举
 */
export enum AudioState {
    STOPPED = 'stopped',    // 停止
    PLAYING = 'playing',    // 播放中
    PAUSED = 'paused',      // 暂停
    LOADING = 'loading',    // 加载中
    ERROR = 'error'         // 错误
}

/**
 * 音频播放选项
 */
export interface AudioPlayOptions {
    /**
     * 音量（0-1）
     */
    volume?: number;
    
    /**
     * 是否循环播放
     */
    loop?: boolean;
    
    /**
     * 播放速率（0.5-2）
     */
    playbackRate?: number;
    
    /**
     * 淡入时间（秒）
     */
    fadeIn?: number;
    
    /**
     * 淡出时间（秒）
     */
    fadeOut?: number;
    
    /**
     * 是否自动播放
     */
    autoplay?: boolean;
    
    /**
     * 是否静音
     */
    muted?: boolean;
    
    /**
     * 开始播放的时间点（秒）
     */
    startTime?: number;
    
    /**
     * 结束播放的时间点（秒）
     */
    endTime?: number;
}

/**
 * 音频事件类型
 */
export enum AudioEventType {
    // 实例事件
    PLAY = 'play',
    PAUSE = 'pause',
    STOP = 'stop',
    END = 'end',
    VOLUME_CHANGE = 'volumeChange',
    RATE_CHANGE = 'rateChange',
    LOOP_CHANGE = 'loopChange',
    MUTE_CHANGE = 'muteChange',
    FADE_START = 'fadeStart',
    FADE_COMPLETE = 'fadeComplete',
    ERROR = 'error',
    
    // 管理器事件
    GLOBAL_VOLUME_CHANGE = 'globalVolumeChange',
    ENABLED_CHANGE = 'enabledChange',
    UNLOCK = 'unlock'
}

/**
 * 音频事件数据
 */
export interface AudioEventData {
    /**
     * 音频名称
     */
    name: string;
    
    /**
     * 音频类型
     */
    type: AudioType;
    
    /**
     * 音频状态
     */
    state: AudioState;
    
    /**
     * 当前时间（秒）
     */
    currentTime?: number;
    
    /**
     * 总时长（秒）
     */
    duration?: number;
    
    /**
     * 音量（0-1）
     */
    volume?: number;
    
    /**
     * 播放速率
     */
    playbackRate?: number;
    
    /**
     * 是否循环
     */
    loop?: boolean;
    
    /**
     * 是否静音
     */
    muted?: boolean;
    
    /**
     * 错误信息
     */
    error?: Error;
}

/**
 * 音频事件处理器
 */
export type AudioEventHandler = (event: AudioEventData) => void;

/**
 * 音频管理器选项
 */
export interface AudioManagerOptions {
    /** 全局音量 (0-1) */
    globalVolume: number;
    /** 是否启用音频系统 */
    enabled: boolean;
    /** 是否自动解锁音频（移动设备） */
    autoUnlock: boolean;
    /** 最大并发播放数 */
    maxConcurrent: number;
    /** 音频池大小 */
    poolSize: number;
    /** 默认淡入时间（秒） */
    defaultFadeIn: number;
    /** 默认淡出时间（秒） */
    defaultFadeOut: number;
}

/**
 * 音频实例接口
 */
export interface AudioInstance {
    /**
     * 音频名称
     */
    name: string;
    
    /**
     * 音频类型
     */
    type: AudioType;
    
    /**
     * 音频状态
     */
    state: AudioState;
    
    /**
     * 音频元素
     */
    element: HTMLAudioElement;
    
    /**
     * 当前时间（秒）
     */
    currentTime: number;
    
    /**
     * 总时长（秒）
     */
    duration: number;
    
    /**
     * 音量（0-1）
     */
    volume: number;
    
    /**
     * 播放速率
     */
    playbackRate: number;
    
    /**
     * 是否循环
     */
    loop: boolean;
    
    /**
     * 是否静音
     */
    muted: boolean;
    
    /**
     * 错误信息
     */
    error?: Error;
    
    /**
     * 播放音频
     */
    play(options?: AudioPlayOptions): Promise<void>;
    
    /**
     * 暂停音频
     */
    pause(): void;
    
    /**
     * 停止音频
     */
    stop(): void;
    
    /**
     * 设置音量
     */
    setVolume(volume: number, fadeTime?: number): void;
    
    /**
     * 设置播放速率
     */
    setPlaybackRate(rate: number): void;
    
    /**
     * 设置循环
     */
    setLoop(loop: boolean): void;
    
    /**
     * 设置静音
     */
    setMuted(muted: boolean): void;
    
    /**
     * 淡入
     */
    fadeIn(duration?: number): Promise<void>;
    
    /**
     * 淡出
     */
    fadeOut(duration?: number): Promise<void>;
    
    /**
     * 销毁实例
     */
    destroy(): void;
} 